﻿#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFileDialog>
#include <QFile>
#include <QDataStream>
#include <string.h>
#include "slaveinfor.h"
#include "comfunc.h"
#include "Typedefine.h"
#include "Macro.h"
#include "Constant.h"

namespace Ui {
class Widget;
}

#pragma pack(push, 1)
typedef struct
{
    U8 au8SWLable[20];      // 标识符，字符串
    U8 au8SWVer[14];        // 版本号，字符串
    U8 au8OffSet[4];        // 固件偏移，大端存储
    U8 au8SWLen[4];         // 固件大小，大端存储
    U8 au8SWCRC[2];         // 固件CRC，大端存储
    U8 u8SlaveNum;          // 子机数/号
    U8 au8Res[1];           // 预留
    U8 au8PackInforCRC[2];  // 包信息CRC
}PackInfor_ts; // 包信息
#pragma pack(pop)

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

    bool CheckMachineCodeIsLegal(QString strMachineCode);
    bool CheckMachineVerIsLegal(QString strMachineVer);
    bool CheckSlaveTableIsLegal();
private slots:
    void RecvSlaveInfor(QString strSWLable,QString strSWVer);

    void on_Btn_AddSlave_clicked();

    void on_Btn_Change_clicked();

    void on_Btn_Del_clicked();

    void on_Btn_Packet_clicked();

    void on_Btn_Reset_clicked();

    void on_Path_clicked();

    void on_Btn_Clear_clicked();

private:
    Ui::Widget *ui;                 // 主界面
    QMessageBox *MsgDlg;            // 警告界面
    SlaveInfor *SlaveInfor;         // 从机信息UI
    QFileDialog cSaveFileDialog;    // 保存文件标准对话框
    QString strSaveFilePath;        // 保存文件目录
    QFileDialog cSlaveFileDialog;   // 从机文件标准对话框
    QFile *SlaveFile;               // 从机文件
    QString strSlavePath;           // 从机文件目录
    U8  u8SlaveNums;                // 从机数量
    QList<QString>SlavePathList;    // 从机文件地址list
};

#endif // WIDGET_H
